package Heroes;

import java.util.Iterator;
import java.util.LinkedList;

import Disparos.DisparoLaser;
import Interfaz.RepresentacionGrafica;
import Juego.Tablero;
import TDAMapeo.InvalidKeyException;
import Villanos.Villano;

public class HeroeComun extends Heroe {

/**
 * Constructor de la clase
 * @param t tablero
 */
		public HeroeComun(Tablero t) {
			super("HeroeComun", 200, 20, 15, t, 20);
			try {
				component=new RepresentacionGrafica(tablero.getMapeo().get("HeroeComun"), 0,0);
			} catch (InvalidKeyException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
/**
 * Permite al heroe atacar a un villano
 * @param atac Villano a atacar
 */
		protected void atacarVillano(Villano atac) {
			component.setAtacando();
			d=new DisparoLaser(posicion+40, altura+40,tablero);
			int i=3000;
			tablero.getPanel().add(d.getRepresentacion());
			d.getRepresentacion().setVisible(true);
			try {
				rep.p(tablero.getMapeoSonidos().get(nombre));
			} catch (InvalidKeyException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			while ((tablero.getVida()>0) && atac!=null  && atac.getPosicion()-d.getPosicion()>-10 && vida>=0)
			{
				d.setPosicion(d.getPosicion()+10);
				d.getRepresentacion().setLocation(d.getPosicion(),d.getRepresentacion().getY());
				try {
					Thread.sleep(20);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				i-=20;
			}
			d.getRepresentacion().setVisible(false);
			tablero.getPanel().remove(d.getRepresentacion());
			d=null;
			component.setComun();
			if (atac!=null && atac.getVida()>0)
				atac.reducirVida(ataque);
			if ( (atac!=null) && (atac.getVida()<=0)){
			atac.eliminar();
			atac=null;}
			try {
				Thread.sleep(i);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}

		/**
		 * Permite clonar al heroe
		 */
		@Override
		public Heroe clonar() {
			return new HeroeComun(tablero);
		}
/**
 * Busca a un villano para atacar en su misma fila
 */
		@Override
		protected void accion() {
			Villano atac=null;
			LinkedList<Villano> lista=tablero.getFilaVillanos(fila);
			if (!lista.isEmpty() && vida>0)
			{
				Iterator<Villano> it=lista.iterator();
				
					atac=it.next();
				while(it.hasNext())
				{	Villano v1=it.next();
					if ((v1.getPosicion()>posicion) && v1.getPosicion()<=atac.getPosicion()){
							atac=v1;
							}
				}
				if (atac.getPosicion()>posicion)
					atacarVillano(atac);
			}
			
		}

	}


